遗传算法(GAs)是一类受自然进化原理启发的随机全局搜索启发式方法,特别是达尔文主义的“适者生存”和基因重组原则。
1. 表示框架
- 经典遗传算法(Canonical GAs): 使用二进制或格雷码字符串表示来编码决策变量。
- 实数编码遗传算法(RCGAs): 直接操作浮点向量,通常在连续优化中效率更高。
2. 进化循环
一个评估、选择与繁殖的迭代过程。关键概念是区分 基因型(编码后的位串/染色体)与 表型(实际问题空间中解码后的决策变量值)。
从二进制串映射到实数值 $x \in [a, b]$ 的公式为:
$$x = a + \frac{decimal\_value \times (b - a)}{2^L - 1}$$
其中 $L$ 为染色体的位长。
汉明悬崖
注意标准二进制编码中的 汉明悬崖——即相邻十进制数(如 7 和 8)具有截然不同的二进制位模式(
0111 与 1000),这使得遗传算法难以进行局部搜索。
Python Implementation: Binary-to-Real Decoding
问题 1
为什么格雷码在遗传算法中通常优于标准二进制编码?
问题 2
如果突变概率(p)设置得过高(例如,p = 0.5),可能的结果是什么?
案例研究:桥梁构件优化
阅读以下情景并回答问题。
你正在优化一个桥梁构件的设计,其决策变量为“材料厚度”。
- 厚度必须介于 0.0mm 和 10.23mm之间。
- 你使用的是带有 10 位 二进制字符串表示的经典遗传算法。
Q
1. 如果某个个体的染色体为
0000000000,其解码后的厚度是多少?答案:0.0mm
二进制字符串
二进制字符串
0000000000 在十进制中等于 0。使用公式 $x = a + \frac{decimal \times (b-a)}{2^L - 1}$,可得 $0.0 + \frac{0 \times (10.23 - 0.0)}{1023} = 0.0$。
Q
2. 计算此 10 位设置下的搜索精度(厚度最小可能的变化量)。
答案:0.01mm
精度定义为范围除以最大可能的十进制值。$\frac{10.23 - 0}{2^{10} - 1} = \frac{10.23}{1023} = 0.01mm$。
精度定义为范围除以最大可能的十进制值。$\frac{10.23 - 0}{2^{10} - 1} = \frac{10.23}{1023} = 0.01mm$。
Q
3. 在选择过程中,个体 A 的适应度为 10,个体 B 的适应度为 30。使用轮盘赌选择法,个体 B 被选中的概率是多少?
答案:75%
总适应度 = $10 + 30 = 40$。选择 B 的概率为 $\frac{30}{40} = 0.75$,即 75%。(3:1 的比例)。
总适应度 = $10 + 30 = 40$。选择 B 的概率为 $\frac{30}{40} = 0.75$,即 75%。(3:1 的比例)。